package com.ssm.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.ssm.bean.MaterialInfo;

/**
 * 操作物料基础信息表(同步的表+本地自定义表)<br/>
 * 包括对ERP数据的同步与查询方法（查询接口还未定义）
 * @author zhaoxianming
 * 
 */
public interface MaterialBaseInfoMapper
{
	/**
	 * @Description 查询所有物料基础信息
	 * @param params
	 * @return List<MaterialInfo>
	 */
	public List<MaterialInfo> selectAllMaterialInfoWithDev(Map<String,Object> params);
	
    /**
     * 新增物料
     */
    public int insertOrUpdateMaterialInfo(@Param("materialInfo") MaterialInfo materialInfo);

    /**
     * @Description 解绑rfid卡
     *  void
     */
    public void deleteRfidCard(@Param("materialCode") String materialCode);
    
    /**
     * @Description 绑定rfid卡
     *  void
     */
    public void bindRfidCard(@Param("materialCode") String materialCode, 
    		@Param("rfidCardNumber") String rfidCardNumber);
    
    /**
     * 删除本地库定义物料信息
     */
    public void deleteMaterialBaseInfo(@Param("delList") List<String> delList);

    /**
     * 更新物料信息
     * @param materialInfo
     */
    public void updateMaterialInfo(@Param("materialInfo") MaterialInfo materialInfo);

    /**
     * 获取物料信息表中所有的物料信息记录数量
     */
    public int selectAllMaterialInfoCount();

    /**
     * 根据物料编码得到物料的所有信息
     * @param materialCode
     * @return
     */
    public MaterialInfo selectMaterialByCode(String materialCode);

    /**
     * 根据物料编码判断物料是否重复
     */
    public boolean isMaterialRepeat(String materialCode);
    
    /**
     * 判断RFID卡号是否已经绑定
     */
    public boolean isRfidCardNumberRepeat(String rfidCardNumber);

    /**
     * 物料是否可以删除
     */
    public boolean isMaterialCanDelete(List<Integer> delList);
    
    /**
     * 获取物料信息列表
     */
	public List<MaterialInfo> selectTopMaterialInfoByParams(Map<String, Object> params);
	
    /**
     *  查询出物料没有安全库存规则的物料从库存记录
     * @param params
     * @return
     */
    public List<MaterialInfo> queryMaterialsNoRuleByPage(Map<String, Object> params);
    
    /**
     * 根据物料名称、物料规格、物料型号获取到物料编码
     * @param materialName
     * @param materialSpec
     * @param materialModel
     * @return
     */
    List<String> selectMaterialByParam(@Param("materialName") String materialName,@Param("materialSpec") String materialSpec,@Param("materialModel") String materialModel);
    
    /**
     * @Description Excel导入物料信息
     * @param list void
     */
    void insertByExcel(List<MaterialInfo> list);
}